In computer programming, a common design paradigm or pattern is the model-view-controller pattern. The model-view-controller pattern is used to separate the design of a user interface from the substantive content, data, or model that it represents or manipulates. Integrated Development Environments (IDEs) such as Visual Studio, Sun Java Studio Creator, and others allow programmers to design user interfaces somewhat independent of their data models.
One problem with implementing the model-view-controller pattern is the time required for a programmer to design a view or user interface that logically matches the model or data source. Previously, IDEs and other software tools for designing user interfaces have included some limited features for designing a view or user interface given a data source. For example, given a data source such as a database table, an IDE or design tool might use information describing the database table (e.g., a schema) to auto-create a number of user interface elements and associate them with fields in the database table. For example, if the data source were a table of books with fields such as author, title, etc., an IDE or layout design tool might use schematic information to auto-create textbox interface elements for the table's fields and label the interface elements based on the names of the fields. Other rudimentary techniques have been used to facilitate tailoring a user interface (control view, interactive form, web page, etc.) to a particular data source. For example, allowing fields to be dragged onto a design surface and creating interface elements in response. However, even with these types of tools, a programmer may still require significant time to tailor a user interface for a particular data source.
Another problem with implementing the model-view-control pattern is the complexity of control logic and maintaining synchronicity between the model or data source and the view with the view or user interface. This problem has been reduced with the emergence of data binding techniques. Data binding allows a data source (e.g., an XML document, a database table, etc.) to be automatically bound with a user interface, either from data source to user interface, from user interface to data source, or both. This simplifies the programming model because the programmer, for example, does not have to write code to update each user interface element with the data from the data source. Or, depending on the type of binding, the programmer may not have o write code to update the data source when the user interface elements change. The behavior of the interface and the content of the data source are linked by transparent mechanisms.
FIG. 1 shows a conceptual data binding example. A user interface or form 50 is bound to data sources 52, in this case, an XML document 54 (“books.xml”) and a database 56 with tables 58. The form 50 has user interface elements such as scrolled lists 60 and textboxes 62, each of which is bound to data in a data source 52. For example, a book's title (from XML document 54) might be bound to textbox 62, such that changes to one automatically cause changes to the other. An abstraction layer of binding sources 64 helps to hide details of accessing the data sources 52. However, for purposes herein, a data source is considered to be either an actual source of data (e.g., a database, an XML document, a service provided by a server, etc.), or an object that handles or brokers access to an actual data source, or a combination thereof. Data binding is available in a number of Java and .NET development tools. Documentation on how to program a data binding tool or component is also available.
However, it can be a slow and difficult process for a programmer to tailor a user interface to a particular data source. For example, many user interface elements may need to be created, configured, and bound, element by element, to the data source. Furthermore, schema information about a data source may be needed, and changes in the configuration of the data source can require modification of the user interface.